package conf

import (
	"fmt"
	"github.com/kevinlisr/install-levault/vari"
	"github.com/spf13/viper"
)

const (
	ConfigEnv         = "GVA_CONFIG"
	ConfigDefaultFile = "config.yaml"
	ConfigTestFile    = "config.test.yaml"
	ConfigDebugFile   = "config.debug.yaml"
	ConfigReleaseFile = "config.release.yaml"
)

// Viper //
// 优先级: 命令行 > 环境变量 > 默认值
// Author [SliverHorn](https://github.com/SliverHorn)
func Viper(path ...string) *viper.Viper {
	var config string
	// 函数传递的可变参数的第一个值赋值于config
	config = path[0]
	vari.Logger.Info(fmt.Sprintf("您正在使用func Viper()传递的值,config的路径为%s", config))

	v := viper.New()
	v.SetConfigFile(config)
	v.SetConfigType("yaml")
	err := v.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("Fatal error config file: %s \n", err))
	}
	cfg := newConfig()
	if err = cfg.InitGlobal(); err != nil {
		vari.Logger.Panic(err.Error())
	}

	if err = v.Unmarshal(cfg); err != nil {
		vari.Logger.Panic(err.Error())
	}
	fmt.Println("=============", *cfg.Packages)
	return v
}
